elasticsearch使用JAVA API从Elastic Search建议搜索响应中提取源数据
我在Java中使用CompletionSuggester来自动完成应用程序,我能够使用JavaAPI从搜索响应中提取建议文本。在检查原始响应时,我看到建议响应包含源数据(完整文档,而不仅仅是建议字符串)。如何从建议搜索响应中提取源数据
请在下面找到我用来获取建议文本的代码-
SearchRequest searchRequest = new SearchRequest("my_entitiy");
CompletionSuggestionBuilder suggestionBuilder = new CompletionSuggestionBuilder("nameSuggest");
suggestionBuilder.size(10).prefix(input).skipDuplicates(true);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.suggest(
new SuggestBuilder().addSuggestion(SUGGESTION_NAME, suggestionBuilder));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = elasticClient.search(searchRequest, RequestOptions.DEFAULT);
Suggest suggest = searchResponse.getSuggest();
Suggest.Suggestion<Suggest.Suggestion.Entry<Suggest.Suggestion.Entry.Option>> suggesition =
suggest.getSuggestion(SUGGESTION_NAME);
List<String> suggestionList = new ArrayList<>();
for (Suggest.Suggestion.Entry<Suggest.Suggestion.Entry.Option> entry : suggesition.getEntries()) {
for(Suggest.Suggestion.Entry.Option option:entry.getOptions()){
suggestionList.add(option.getText().toString());
}
}
在选项中,有几种方法可用于提取分数、文本和突出显示的内容。是否可以从选项中获取_源数据?我看到一个toXContent函数,可以使用它来获取源数据吗
上面的代码片段正在将建议的字符串保存到一个列表中,我想知道是否有可能获得完整的docjson
# 1 楼答案
我通过将
Suggest.Suggestion.Entry.Option
转换为它的实现CompletionSuggestion.Entry.Option
实现了这个技巧,它公开了SearchHit
。下面是将源映射到对象的步骤clazz
是要映射到的类# 2 楼答案
您可以使用JHLC(java高级rest客户端)的fetch source API,它是Elasticsearch的官方java客户端
根据链接
您可以从之前的响应中获取id,然后使用获取这些文档的来源
在Elastic and的样本上方,其中
posts
是索引名,1
是文档id# 3 楼答案
您始终可以使用源筛选来筛选搜索结果中要返回的字段。在elastic中,可以在
_source
上下文中添加includes
、excludes
或两者。例如,您只想获取field1
和field2
,您可以将_source
与查询一起设置如下:使用高级rest客户端,可以实现以下相同功能: